package com.wanghangcloud.common.annotation;



import java.lang.annotation.*;

/**
 * 日志注解
 *
 * @author Ray
 * @since 2024/6/25
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Documented
public @interface Log {

    /**
     * 日志描述
     *
     * @return 日志描述
     */
    String value() default "";

    /**
     * 操作类型
     *
     * @return 操作类型
     */
    OperatorType operType() default OperatorType.OTHER;



    /**
     * 是否记录请求参数
     *
     * @return 是否记录请求参数
     */
    boolean params() default true;

    /**
     * 是否记录响应结果
     * <br/>
     * 响应结果默认不记录，避免日志过大
     * @return 是否记录响应结果
     */
    boolean result() default true;

    /**
     * 自定义 log参数对象,不由公共处理,暂自己生成module,content
     * @return
     */
    String staticCustomerSpel() default "";

    /**
     * 自定义操作类型,根据参数的id记录,获取字段
     * @return
     */
    String customerOperTypeField() default "";

    /**
     * 操作对象描述
     * @return
     */
    String operObjDesc() default "";

    /**
     * 操作对象field名称
     * @return
     */
    String operObjField() default "";



    enum OperatorType {
        ADD("add"),
        UPDATE("update"),
        DELETE("delete"),
        IMPORT("import"),
        EXPORT("export"),
        OTHER("other"),
        ;
        String code;

        OperatorType(String code) {
            this.code = code;
        }

        public String getCode() {
            return code;
        }
    }
}
